Day 2 ~ Day19 的內容是這本書的 Part I,討論的都是系統中的資料如何在 單一機器 作業,在接下來的 10 天,也是這本書的 Part II,就要進入在 多台機器 的情形下如何儲存和檢索資料,做分散式資料有以下幾點好處:
同 Day 3 中 Scalability 所講的,若你的流量成長到單一機器能負荷的量,部署至多台機器上能讓你分散流量。
同 Day 2 Reliable 所講的,多台機器代表你有 redundant 的資源,所以某一台掛了,另一台可以接手。
能降低不同地區的 response time,每一個 user 能用離他最近的 data center 中的資料,而不用繞大半個地球去取得資料。
scale 是為了更高的 load parameter (load parameter 意思請參閲 Day 3),這裡來看看有哪幾種擴充架構吧:
也可稱為 vertical scaling (垂直擴充) 或 scaling up,讓一台機器有更多的 CPU、更大的記憶體和更大的硬碟等等,但我們也都 知道,2 倍的資源不代表能承受 2 倍的流量。
這裡每台都有獨立的 CPU 和記憶體,但唯獨硬碟是透過網路與其他機器共用。
也可稱為 horizontal scaling (水平擴充) 或 scaling out ,每一台機器 (或虛擬機) 被稱為 node (節點),每一個節點皆是獨立的資源,彼此的協調溝通都是在軟體 level 下透過網路完成,分散式資料會讓資料模型的複雜性提高,在某些情況下,單一執行緒的 process 效率會比有 100 核 CPU 的叢集來的好,但換句話說,shared-nothing 系統也可以非常強大,這也是接下來 10 天中要講的。
這是 2 種常見的在多個節點間做資料分散式的方法:
保持資料有多份副本在多個節點上,Replication 提供了 redundancy 能力,意思為一個節點掛了也能用其他節點提供服務,Replication 也能提高執行效率。
把大的資料切割成許多份的小資料,然後也是放到多個節點上 (也稱為 sharding)。
雖然這是 2 個不同的機制,但它們通常會一起用,如下圖:
然後希望往後 10 天能把 Replication 跟 Partitioning 講完 XD